import { fileURLToPath, URL } from 'node:url'
import { defineConfig, loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'

export default defineConfig(({ mode }) => {
  // 加载环境变量
  const env = loadEnv(mode, process.cwd(), '')
  
  // 打印加载的环境变量（开发环境）
  if (mode === 'development') {
    console.log('Vite 配置信息:')
    console.log(`- 运行模式: ${mode}`)
    console.log(`- API 地址: ${env.VITE_API_BASE_URL}`)
    console.log(`- Token 加密: ${!!env.VITE_TOKEN_ENCRYPTION_KEY ? '已启用' : '未配置'}`)
  }

  return {
    plugins: [
      vue(),
      ...(mode === 'development' ? [vueDevTools()] : []), // 仅开发环境启用调试工具
    ],
    
    resolve: {
      alias: {
        '@': fileURLToPath(new URL('./src', import.meta.url))
      },
    },
    
    server: {
      port: 3000,
      proxy: {
        '/api': {
          target: env.VITE_API_BASE_URL || 'https://localhost:7204',
          changeOrigin: true,
          secure: false,
          configure: (proxy, options) => {
            // 代理配置回调
            proxy.on('error', (err, req, res) => {
              console.log('代理错误:', err);
            });
            proxy.on('proxyReq', (proxyReq, req, res) => {
              console.log('代理请求:', req.method, req.url);
            });
          }
        }
      },
      open: true, // 自动打开浏览器
    },
    
    // 构建配置
    build: {
      outDir: 'dist',
      assetsDir: 'assets',
      sourcemap: mode === 'development', // 仅开发环境生成 sourcemap
      minify: mode === 'production' ? 'terser' : false,
      terserOptions: {
        compress: {
          drop_console: mode === 'production', // 生产环境移除 console
          drop_debugger: true,
        },
      },
      rollupOptions: {
        output: {
          chunkFileNames: 'js/[name]-[hash].js',
          entryFileNames: 'js/[name]-[hash].js',
          assetFileNames: (assetInfo) => {
            const info = assetInfo.name.split('.');
            const ext = info[info.length - 1];
            if (/\.(css|less|sass|scss)$/.test(assetInfo.name)) {
              return `css/[name]-[hash].${ext}`;
            }
            return `assets/[name]-[hash].${ext}`;
          },
          manualChunks: {
            'element-plus': ['element-plus'],
            'vue-vendor': ['vue', 'vue-router'],
          },
        },
      },
    },
    
    // 环境变量配置 - 修复部分
    define: {
      // 使用环境变量中的加密密钥，如果不存在则使用空字符串
      '__FRONTEND_ENCRYPTION_KEY__': JSON.stringify(env.VITE_TOKEN_ENCRYPTION_KEY || ''),
      '__APP_ENV__': JSON.stringify(mode),
      '__APP_DEBUG__': JSON.stringify(mode === 'development'),
    },
    
    // CSS 配置
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: `@import "@/styles/variables.scss";`
        }
      }
    },
    
    // 预览配置
    preview: {
      port: 3000,
      host: true,
    }
  }
})